range: Redraw when slider visiblity changes
authorMatthias Clasen <mclasen@redhat.com>
Thu, 5 Nov 2015 12:23:54 +0000 (07:23 -0500)
committerMatthias Clasen <mclasen@redhat.com>
Thu, 5 Nov 2015 12:26:10 +0000 (07:26 -0500)
We were not queuing a draw (and not updating the CSS node) when
the slider visibility changed. This was exposed by the Trough
button in tests/testscale.
Fix this by taking slider visibility into account when deciding
whether to queue a draw in response to adjustment changes.

gtk/gtkrange.c

index ceecafa935274c0fd08a6002ba7276e5213bc33b..cae85924b1e1f2f0c3c30b4d80a518013310bf6f 100644 (file)
@@ -3623,14 +3623,24 @@ gtk_range_calc_slider (GtkRange *range)
 {
   GtkRangePrivate *priv = range->priv;
   GdkRectangle new_slider;
+  gboolean visible;
 
-  gtk_range_compute_slider_position (range, 
+  if (GTK_IS_SCALE (range) &&
+      gtk_adjustment_get_upper (priv->adjustment) == gtk_adjustment_get_lower (priv->adjustment))
+    visible = FALSE;
+  else
+    visible = TRUE;
+
+  gtk_range_compute_slider_position (range,
                                      gtk_adjustment_get_value (priv->adjustment),
                                      &new_slider);
 
-  if (gdk_rectangle_equal (&priv->slider, &new_slider))
+  if (gdk_rectangle_equal (&priv->slider, &new_slider) &&
+      visible == gtk_css_node_get_visible (priv->slider_node))
     return;
 
+  gtk_css_node_set_visible (priv->slider_node, visible);
+
   gtk_range_queue_draw_location (range, MOUSE_SLIDER);
 
   priv->slider = new_slider;